💙파이썬

Tuple is immutable (unchangeable)

Operation +와*

Nested list, Nested tuple

Set is unordered collections of unique elements. no indexing, no slicing.

Indexing, slicing, operations +와* are not available for set.

immutable : Tuple, Number, String

mutable : List, Set

💙 9월 28일 화 (week 4_2)

💚 파이썬

set은 index 없고, +, * 안된다.

set은 add(), update()란 메소드 있다. a.add(2), a.update({6})

remove(), discard()도 있다. a.remove(4), a.discard({2,3})

remove는 없는 거 뺄려고 하면 에러남, discard는 에러 안남.

tuple은 두가지 메소드만 : index(), count()

list는 11 method : append, extend, inset 등

union (합집합)

intersection (교집합)

difference (차집합)

subset (부분집합)

issubset()이라는 메소드

set은 index()와 count()가 없다. count는 {89}.issubset(a)로 대체 가능하니까!

Dictionary : a value is retrieved by a key. it is unordered.

a = {key:value, key:value}

key는 list, tuple, string 등 아무거나 다 됨.

can't do slicing for a dictionary.

+, *도 안된다. 이거는 list, tuple만 되는 애들임.

dict의 메소드 :

keys()

values()

items()

get()

clear()

💚 AI

이제부터 simple ai model 배울거다.

tensorflow 는 library이고 여러 package 있다. 그중 한 패키지가 keras임.

keras 안엔 여러 모듈 있고, 그 모듈 중 하나가 datasets고, 걔도 여러 모듈 있고, ....

data는 train data와 test data로 나뉨.

train data만 model을 가지고 있다.

test data는 shouldn't be involve model, never!!

그래서 우리는 train data만 생각할거다.

train data는 data, label로 나눠짐.

data는 문제, label은 정답.

imdb는 internet movies data base

data는 예를들어 "this movie is `~~" 의 text data 그런거고

label은 positve(1), negative(0). 그런거임.

attribute(특징), ( ) 불필요

method(메소드), ( ) 필요

88584는 corpus임.

50000개 중 25000는 train data, 25000는 test data

그 50000개의 data는 88584개의 단어종류를 포함한다.

data -> AI model -> label

data의 len는 다 다른데, 256로 고정시키겠다.

long comment, short comment 가 있지만, 256 words로 고정시킴.

길면 자르고, 짧으면 padding(00000...)로 채움. post면 뒤에, pre면 앞에.

💙 9월 30일 목 (week 5_1)

💚 AL, ML, DL

python statement

if, for, while

function

AI, ML, DL을 먼저 배워보겠다.


💚 AI의 네 타입

  1. supreviesed learning

basic learning.

data가 있는데, data엔 Question과 Answer가 있다. 둘 다 준비되어 있다.

이걸 Model에 넣음.

x1과 x2는 각각 feature임.

예, x1는 height(cm), x2는 weight(kg).

병 있으면 O, 없으면 X.

O, X가 answer, 즉 label임.

x1, x2는 question, 즉 feature data임.

그래서 우리는 다른 키, 체중 가진 경우를 예측하는 거임.

  1. un-supervised learning

no label.

feature만 있다.

just plot the data.

group A, group B 정도로만 나눌 수 있음.

이게 supervised learning을 보조함.

  1. semi-supervised learning

no label

  1. reinforcement learning

위 세가지 경우와 완전히 다름.

Go 바둑 게임.

바둑알을 여기다 두면 이길 확률.

이길 확률 높은 걸 계속계속 배움.

agent , reward, state, environment 있음.


💚 if Intelligence is a cake...

Yann LeCun이라는 사람, God of AI

Geoffey Heton은 King of AI

cake 전체는 computer AI brain.

supervised learning은 icing 같다.

reinforcement learning은 cherry 같다.

내부는 unsupervised learning.


💚 unsupervised learning

deep fake는 unsupervised learning임.

clustering

많은 feature data(weight, height, Blood, Heart, ...) 가 있으면,

1000가지 feature 있으면,

dimension reduction을 해야함.

그게 unsupervised learning.


💚 supervised learning의 두가지 요소

supervised learning에는 두가지 있다.

Input : feature data.

Output : label.

둘 다 주어진다.

그리고 supervised learning은

regression problem, classification problem으로 나뉨.


💚 training vs. test

data를 model에 넣음.

model엔 weight 있음.

weight는 100,000, 1million, 1billion 등 많은 값이 있따.

model을 몇 개 정해놓음. Hypothesis(가설).

그리고 learning해서,

weight(model의 optional parameters)를 찾음.

another new data를 trained model에 넣음.

prediction(; estimation) 함.


💚 feature vs. label

data in supervised learning : feature, label

  1. feature (input, question)

: form이 많다.

(1) table data or time-series data :1D

(2) Image : 1frame. 2D or 3D : 많은 channel 있다. CT, MR, US 등의 이미지는 DICom image임.

(3) video : 3D or 4D : 30frame/sec 등으로 표현.

  1. label (output, answer)

: classification problem.

(1) binary label : malignat of benigh : 0 or 1.

(2) multi-label : 0,`,1,2,.... :

kaggle.com엔 AI computation이 있다.

prize 탈 수 있다.

6 elements로 구성된 1 list가 label 결정. 즉, one-hot Encoding.

data를 training, etst로 바꾸는 비율은 보통

8:2, 7:3, or 9:1

test data는 꼭 isolated 되어있어야 함.


💚 여러가지 ML algorithms

ML alrogithm에는 여러가지가 있다.

regression problem

feature data로서 size 가 있다. only 1 feature.

output, label은 달러임.

일단은 걍 feature가 하나만 있다고 가정하자.

빨간 점이 whole data임.

modeling해서 hypothesis를 세우자. linear pattern이라고.

y=wx+b로. w는 slope, b는 intersection.

두개의 파라미터가 있는 것이다.

every single value는 x,y가 있는거니까 그걸 y=wx+b에 대입.

2 parameter니까 2 equation만 있으면 된다.

근데 여러 가지 해봐가지구 w, b 찾는거다.

💚 Linear Regression 개념

boston housing dataset

14개의 features 있다.

y = w1x1 + .... + w13x13 + b로 식 세울 수 있다. (linear regression이면!)

1. data

먼저, from tensorflow.keras import datasets를 한다.

train_data에는 13 features 있음.

1.1 data analysis

13 feature data가 404개임.

train_data[0]

train_data.shape 하면 (404, 13) 나옴. 2 dimension임.

train_label.shape하면 (404,) 나옴. 즉, 1 dimension임.

(404,1)는 2D로 간주함.

train_data[0] 하면 array([ ?,?,?, ? ..., ?])임.

train_data[0]는 13 elements의 list이고, train_data[403]까지 있음.

test_data.shape 하면 (102,13)가 나옴.

test_label.shape 하면 (102,)가 나옴.

2. Linear Regression Algorithm Modeling (Hypothesis)

🔥의 세 줄만 하면 다 되는거임....!!!!!!!!!!!!!!!!!!!!!!!!!!

from sklearn.linear_model import LinearRegression 🔥

model = LinearRegression( ) 🔥

(c.f. 대문자로 시작하면 class임. model은 instance(; object)고, Linear Regression은 class임.)

(c.f. a = 1 에서 a는 instance임. a.하면 여러 attribute와 method 나옴.)

(c.f. model. 하면 여러 attribute와 method 나옴.)

3. Training

model.fit( train_data, train_label ) 🔥 # fit은 train a model을 의미. w1x1+ ... + w13x13 쓰고 training까지 다 끝남.

4. Evaluation

🍓1🍓 Linear Regression 코드

💙 10월 05일 화 (week5_2)

🍓1🍓 Linear Regression 코드 _ 복습

💚 Linear Regression vs. Logistic Regression

: regression

가로축 feature, 세로축 label

y=wx+b를 찾는거임.

w와 b 찾기

find optimal one. (minimum error인 것으로)

: for classification

가로축 module size, 세로축 양성인지, 음성인지.

세로축은 B(benigh) 아니면 M(malignant)임.

만약 이 문제를 linear regression으로 하면, y=ax+b꼴로 해야되는거니까, more data 점점 추가될 수록 그 기울기가 점점 작아질 것임.

x축이 0.5인 지점을 다 통과하는데, 모듈 추가됨에 따른 그래프가 기울기, y절편이 다 다름. (slope는 biased 됨, accuracy가 not high.)

화면 캡처 2021-10-15 192743.jpg

화면 캡처 2021-10-25 190808.jpg

💚 SIgmoid (logis regression이 쓰는 함수)

Sigmoid function

320px-Logistic-curve.svg.png

화면 캡처 2021-10-05 105902.jpg

y=시그모이드(wx+b)

에서 wx+b가 아무리 크거나 아무리 작아도

범위가 0~1 사이임.

y = w1x1 + w2x2 + ... + b 를 찾기 (w1, w2, ..를 찾는 방법은 얘기 안해줬음.)

얘는 fit을 쓰면 알아서 w1, w2, .... 를 찾아줬었음.

y = 시그모이드(w1x1 + w2x2 + ... + b) 를 찾기 => gradient descent method를 배울거임(?)

gradient dscent를 쓰면 알아서 w1, w1, .... 를 찾아줌.

🍓2🍓 Logistic Regression 코드

Breast Cancer Dataset으로 연습해보자.

전에는 datasets.boston_hosing.load_data()가 저절로 training data와 test data가 들어갔음.

근데 이거는 그냥 data만 569개가 주어지는 거임. 나뉘어서 주어지는 게 아니구.

그래서 이걸 train data와 test data로 우리가 split 해주어야 해.

지금 이렇게 data가 train과 test용으로 나뉘어져서 주어지는지, 그냥 통째로 주어지는지는 housing 문제와 cancer 문제 특성에 따른 차이인가요, 아니면 linear regression, logistic regression 차이 인가요?

keras는 datasets 있다. boston housing,.. 등등

sklearn은 datasets 있다.boston housing, breast cancer, ... 등등

keras는 train_data, train_label, test_data, test_label으로 나누어서 주어짐.

sklearn은 그냥 통째로 주기 때문에, from sklearn.model_selection import train_test_split 으로 우리가 스스로 나눠야 함.

sklearn이 realistic 문제랑 비슷한거지. keras처럼 나눠서 주어지는 게 아니니까....

이제 잘 나뉘어졌네!

y = sigmoid ( w1x1 + w2x2 + ... + w30x30 + b )

sigmoid(x) = 1/ (1+exp(-x))

30개의 feature 중 which feature(parameter)가 중요할까?

맨 뒤에꺼가 제일 중요.

매번 시도할 때마다 다름.

gradient descend method 에 따라 w1~w30가 ramdom number로 책정되기(?) 때문이다.

c.f.) linear regression으로 해보기

c.f. ) 파이썬에서 비교해보는거 : ==로 함.

💙 10월 7일 목 (week6_1)

💚 여러 algorithms 🍓

Linear regression : regression only

logistic regression : classification only

K-NN, SVM, Decision Tree, Random Forest, XGBoost : both regression and classification

💚 K-Nearest Neighbors (k-NN) 개념

화면 캡처 2021-10-07 104514.jpg

가로축 : 할당량이라는 feature

세로축 : HBP라는 feature

o : cardiovascular disease

x : healthy

train model하지 않는다.

화면 캡처 2021-10-07 104611.jpg

k = 3라 하면, 세모에서 가까운 세 개 찾음.

2개가 o, 1개가 x니까

세모는 o라고 판단 내림.

k=5라 하면 o:x = 3:2니까 역시 o라고 판단.

화면 캡처 2021-10-25 192734.jpg

🍓3🍓 KNN 코드

same as above

💚Support Vector Machine (SVM) 개념

화면 캡처 2021-10-07 112135.jpg

화면 캡처 2021-10-07 112650.jpg

support vector간 거리 : width = w

w가 maximize되는 게 좋다.

근데 문제는,

화면 캡처 2021-10-07 112855.jpg

이런 데이터는 못..함...

화면 캡처 2021-10-07 112958.jpg

이렇게 하기야 하겠지만 못하는 애들(panelty)가 있음.

slack(원래 support vector로부터의 거리), panelty constant를 최소화 해야함.

penalty x penalty constant

딜레마 : maximize w를 해야하면서, minimize penalty 해야함.

화면 캡처 2021-10-07 113524.jpg

그림처럼 원형인 데이터는 x는 위로, o는 아래로 내려서 분류할 수 있음.

gaussian kernel function

화면 캡처 2021-10-25 192824.jpg

화면 캡처 2021-10-25 192900.jpg

🍓4🍓 SVM 코드

cancer는 dictionary type이고, key인 'data'를 data에 넣음.

key인 'target'을 target에 넣음.

이것은 supervised learning임.

그 다음은 split data를 함. train과 test로!

random_state = ??어떤 숫자를 해줌으로써 seed를 딱 해줌. 안바뀌게!

그 다음은 # Model training

model = SVC() class의 instance를 model에 넣음.

model.fit(train_data, train_label) 하면 train 다 된거임.

그 다음은 # Evaluation

prediction이랑 test_label 이랑 비교함.

https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

💙 10월 12일 화 (week6_2)

💚 SVM 복습

코드 맨 첫부분엔 import library를 한다.

지난시간엔 SVC (support vector machine)를 짧게 설명했다.

이거 다 배울라면 1달 넘게 걸림...

이젠 더 디테일하게 SVC 배우겠따!

2D 그래프,

가로축 x1(feature)

세로축 x2(another feature)

circle들과 x들이 있다.

화면 캡처 2021-10-16 123709.jpg

SVC는 그 경계를 찾는 것! support vector를 찾는 것임.

support vector와 중심선은 curve가 아니고 line임.

중심선이 hyper plane임.

화면 캡처 2021-10-16 123841.jpg

3D 그래프

x1, x2, x3의 세가지 feature이 축임.

이것도 마찬가지로 plane으로 영역 구분 가능.

4D 면 3D로 영역 구분,

5D 면 4D로 영역 구분.

뭐가됐든 어쨋던 hyperplane임.

hyperplane은 2 group으로 seperating하는 애임. => seperating hyperplane (line, plane, 3D, 4D 등등일 수 있음.)

화면 캡처 2021-10-16 124120.jpg

2D 문제에서, hyper plane은 w1x1 + w2x2 + b로 표현 가능.

첫번째그룹 : w1x1 + w2x2 + b >= 0 임. (동그라미들)

두번째그룹 : w1x1 + w2x2 + b < 0 임. (엑스들)

젤 가까운 동글은 +1,

젤 가까운 엑스는 -1

젤 가까운 동글은 w1x1 + w2x2 + b = +1

젤 가까운 엑스는 w1x1 + w2x2 + b = -1 이다.

화면 캡처 2021-10-16 124219.jpg

화면 캡처 2021-10-16 124310.jpg

젤 가까운 동글 과 w1x1 + w2x2 + b = 0 line과의 거리는,

| w1x1+ w2x2 + b | / (w1^2 + w2^2 )^(0.5)

= 1 / (w1^2 + w2^2 )^(0.5) = 1/ |w|

화면 캡처 2021-10-16 124347.jpg

화면 캡처 2021-10-16 124507.jpg

support vector간 whole distance는 2 / (w1^2 + w2^2 )^(0.5) = 2/ |w| 이다.

support vector machine은 그 거리를 maximize 해야 한다. 즉, margin을 maximize 하는 것. 2 / |w| 를 mximize 해야 함.

이걸 하기 위해, 역수를, 즉 (w1^2 + w2^2 )^(0.5) / 2를 minimize 해보자!!

즉 w1^2 + w2^2 를 minimize 해보자!

이건 two features니까 이런 식이 나온 거임.

화면 캡처 2021-10-16 125230.jpg

만약 1000 features 문제였더라면 (w1^2 + w2^2 + ... + w1000 ^2 )^(0.5) 를 minimize 해야햇을 거임.

이건 결국 (1/2) w ??????????????

largrange 라그랑주가 이 fomulation 찾음.

💚 SVM의 2 issue

🧸 1. not always seperable : line만으로 완벽히 o과 x를 나눌 수 없다 ㅜ.

1/2 w벡터T w벡터 + c*Sum( ) 를 minimize 해야함.

우리는 optimal c를 찾아야 함!!

원래는 c = 3, c =5 이런걸로 했었음.

penalty를 얼마나 줄지가 c 임.

화면 캡처 2021-10-16 130433.jpg

🧸 2. 만약 x가 가운데에 원모양이구, 그 주변을 o가 둘르고 있다면, linear equation인 w1x1+w2x2 + w3x3 + ... 가지고는 표현 불가능. 그래서 변경(transfer, transform) 해줘야 함.

이건 gaussian 모양이다. 가운데에 x가 몰려있으니까. 3D로 바꿔서 위에있는 게 x, 아래있는 게 o라고 plane으로 나눔.

rbf : radial basis function 가지고 함.

화면 캡처 2021-10-16 131306.jpg

w1x1 + w2x2 + b 와 같은 문제였더라면

w1x1^2 + w2 x2^2 + w3 x1x2로 바꿈.

w1x1 + w2x2 + w3x3 + b 와 같은 문제였더라면

w1x1^3 + w2 x2^3 + w3 x3^3 + w4 x1x2x3 + w5 x1제곱 x2 + w6 x1제곱 x3 + w7 x2제곱 x1 + .... 꼴의 polynomial로 바꺼야댐.

화면 캡처 2021-10-16 131605.jpg

kernel 값은 default = 'rbf'임. 'linear', 'poly', 'rbf'로 할 수 있음 (?)

rbf에서 degree= 3 가 default임. degree =5 면 다 5승임.

model = SVC (kernel = 'poly', degree = 5)로 바꿀 수 있음.

rbf 방법이 제일 popular, 근데 어떤 경우는 poly가 나을 수도.

결국 우리는 C, kernel, degree를 결정해야 함.

Q ) 방금 알려준 위 아래로 나누는 게 rbf라는 거임 아님 poly란 거임? 그리고 왜 rbf가 디폴트임??

🧸 SVC랑 SVR 있음.

💚 Decision Tree 개념

화면 캡처 2021-10-16 132410.jpg

//43쪽

decision tree

root에서 internal node로까지만, 즉 첫번째로 갈라지는 게 depth1

leaf node까지 갈라지는 게 depth 2

우리는 information gain을 maximize해야함. 어케 갈라지는지를 최대한 자세히(?).

화면 캡처 2021-10-16 132719.jpg

//44 symbol notation

parent node와 child node 있다.

Dp : 부모의 dataset

Np : 부모의 number of samples

Impurity를 계산할 수 있다.

화면 캡처 2021-10-16 133016.jpg

'#1' : 50퍼의 정확도임. higher impurity

(부모) 병있는 그룹 100, 건강 그룹 100을

(자식1) 병50, 건강50

(자식2) 병50, 건강50

으로 나누고 싶음.

'#2' : 이게 더 나은 방법임. 80퍼의 정확도. lower impurity

(부모) 병있는 그룹 100, 건강 그룹 100을

(자식1) 병20, 건강80

(자식2) 병80, 건강20

으로 나누고 싶음.

dicision tree는 2 group으로 나누는 거임.

두 그룹간 차별을 둬야 함. discriminate two groups.

last group은 only 1 group should be.

'#2' 처럼 되려면, impurity를 낮춰야 함.

자꾸자꾸 자식으로 내려갈 수록 impurity를 낮춰야 함.

화면 캡처 2021-10-16 133428.jpg

I-G(t)는 Gini impurity at the node t

impurity 계산하는 방법은 ~~~

세번째 그림은 only one group 이니까 pure하고, impurity=0

node가 impurity = 0 될 때까지 반복하는 거임.

맨 왼쪽이 worst, 맨 오른쪽이 best.

화면 캡처 2021-10-16 134023.jpg

I_H (t) Entroyp at the node t

맨 왼쪽이 I_H(t) = 1 , 안좋다

맨 우측이 I_H(t) =

화면 캡처 2021-10-16 134106.jpg

가운데가 50:50, gini impurity 최대인 곳, entropy가 최대인 곳.

둘이 비슷하니까 원하는 거 하믄 돼.

sklearn 에선 gini impurity가지고 평가하는 게 default임.

화면 캡처 2021-10-16 134231.jpg

parent node가 worst

gini 가지고 평가해보니, parent는 0.5임.

자식1은 ~~~.

자식 2는 ~~~.

자식1에게 갈 애들은 0.32 * (50/200)

자식에게 갈수록 impurity 적어짐./

informaion gain인 IG(Dp,f) 을 maximize 해야 함.

왼쪽보다 오른쪽이 나음.

이게 Deicision Tree란 거임.

c.f.)

화면 캡처 2021-10-16 132841.jpg

🍓5🍓 Decision Tree 코드

decision 해볼라구 tree 해보겠다

💡 model = DecisionTreeClassifier() 에서의 파라미터

💡 파라미터 : criterion 은 디폴트가 'gini'임. 이거 말고 'entropy'로 해두 댐.

💡 파라미터 : splitter = 'best' 는 maximize information gain 하게 해주는 것.

💡 파라미터 : max_depth = None 이다. max_depth를 정할 수도 있음. 요게 가장 중요한 파라미터. performance는 나빠지겠지만 일단 뭐... 너무 깊은 deep tree는 accuracy가 나빠짐. 너~무 많이 해서.

ex) model = DecisionTreeClassifier(max_depth = 4) 등으로 할 수 있음.

💡 파라미터 : min_samples_split = 2 가 디폴트임.

💚 Random Forest 개념

Random forest 를 설명하고 끝내겠다.

decision tree가 가끔 bad performance 보여줌. 왜 그럴까? 를 생각해봤더니

oulier가 affects the decision tree.

그래서 어케 modify 할까..?

small decision tree 만들자!

예를들어, 1000 data, 100 features 가 원래 있는 문제인건데,

랜덤히 뽑힌 100 data, 10 features 갖고만 tree 만들고,

또 다른 걸로 tree 만들고 함.

숲을 만듦.

각 나무는 decision 있다.

그리고 이제 각 나무들 중 vote한다.

💙 10월 14일 목 (week7_1)

🍓5🍓 Decision Tree 코드

우리는 30 features 있다. for each patient.

0(malignant)인지 1(benign)인지 결정함.

어떤 feature는 중요, 어떤 feature는 별로 안중요.

그래서 어떤 feature가 중요한지 결정해야 함.

이제 얘를 정렬해보자.......

💚 decision tree 예시

화면 캡처 2021-10-25 203459.jpg

Decision tree 예제.

XGBoost 오늘 배울꺼임.

XGBoost로 top 3 feature 뽑았고, 그게 LDH, hs-CRP, Lymphocyte 임.

이거가지고 죽을지, 살을지 결정.

우리는 sklearn으로 한다. import sklearn

💚 Random Forest 개념

many, small decision tree

new data가 각 tree에 들어가고,

각 tree가 results 만들어냄 : A, B, A, A, B, A, B, B, A

4A와 3B 이므로 결론은 A이다.

🌟 Many decision trees + bagging(Bootstrap Aggregating) + Feature Randomness

Bagging : random data sampling with replacement. 만약 3 data가 있는데, 중복을 허용해서 3개 선택함. ex) 2 1 2 이렇게 선택됨. 1000 data 있고, 1000 data를 뽑고 싶은 거라면, 그 1000 data엔 same data may exist. 그래서 원래의 1000data랑 뽑힌 거랑 다름.

Randomness : 랜덤하게 뽑음.

화면 캡처 2021-10-25 193144.jpg

화면 캡처 2021-10-25 193153.jpg

화면 캡처 2021-10-25 193200.jpg

🍓6🍓 Random Forest 코드

이 방법이 decision tree 그거보다 더 정확함.

근데 그때그때 다름.

random_state = 999 이렇게 해줬는데 왜 다를까?

every single tree가 different data를 가짐.

또, feature가 random selected 되어서 그때마다 달라지는 것임.

💡 model = DecisionTreeClassifier()의 파라미터

💡 n_estimators = 100. small tree의 개수

💡 criterion = 'gini'. 아니면 'entropy' 가능.

💡 max_depth

💡 min_samples_split = 2

💡 min_samples_leaf = 1

💡 max_features = 'auto'. how many feature do you want to choose. default인 'auto'는 sqrt(n_features) 임. 100 feature면 이거 10로 함. 우리는 30feature니까 약 5.몇이니까 5개 선택함.

💡 bootstrap = True 는 randomly 하고 중복 허용. 1000sample 있었으면 1000sample 선택. (개수 같게) 만약 False로 하면 original data로 걍 한단 소리임.

💡 max_samples = None이고, int나 float로도 가능. none이면 기존 data를 그대로 사용(ex.1000개 데이터 있으면 그 1000개 그대로 다 사용), int인 100으로 하면, 100개의 data 가져와서 사용. floating이라고 쓰면, 0.1이라고 쓰면 10퍼만 갖고온다는 뜻.

화면 캡처 2021-10-25 214251.jpg

n_estimgators = 1000, bootstrap = 200, max_features = 3 로 하면,

🍓7🍓 XGBoost 코드

💚 XGBoost 개념

이게 제일 powerful

sklearn은 XGBoost 지원 안함.

from xgboost import XGBClassifier

model = XGBClassifier()

화면 캡처 2021-10-16 145928.jpg

화면 캡처 2021-10-16 150138.jpg

4 data (주황, 연두, 연두, 주황) 있다고 하자.

drug dosage 따른 효과 있는지 없는지 판단. 즉 feature가 걍 한 개만..

8, 12 여야 effective (1) 5, 15면 non effective (0)

먼저, all initial prediction probability of 0.5 regadless of the dosage.

몇 mg이더라도 다 확률 0.5라고 해놓고 시작.

Residual : the differences between the observed and predicted values.

화면 캡처 2021-10-16 150417.jpg

Similarity scores 얻음.

(식)

(0.5) * (1-0.5) + 0.5 x (1-0.5) + 0.5 x (1-0.5) + 0.5 x (1-0.5)

-0.5 + 0.5 + 0.5 - 0.5 를 square

이건 0임.

람다는 0 만드는 거 (?)

화면 캡처 2021-10-16 150629.jpg

화면 캡처 2021-10-16 150704.jpg

Make a tree

root로부터 leaf 찾아야 함.

이 네개를 나누는 방법엔 3가지 있음.

3:1, 2:2, 1:3

화면 캡처 2021-10-16 150909.jpg

impurity랑 similarity랑 반대임

root는 impurity 크고(안좋음) , similarity 작다.

child 로 갈수록 impurity 줄여야 하고, similarity 커져야 함.

🍰 XGBoost

simularity score로 각각각 네모 판단

simularity score이 자식으로 갈수록 up 된다.

Information Gain =

( child_left similarity + child_right similarity ) - Parent similarity

🍰 Decesion Tree

impurity score이 자식으로 갈수록 down 된다.

Information Gain =

Parent Impurity - ( child_lefr impurity + child_right impurity )

화면 캡처 2021-10-16 151415.jpg

화면 캡처 2021-10-16 151503.jpg

화면 캡처 2021-10-16 151607.jpg

💙 10월 19일 화 (week7_2)

💚 XGBoost

화면 캡처 2021-10-25 210137.jpg

각 leaf는 number가지고 있다.

data -> blackbox -> 3 (number)

output이 2이기도 함. 즉, 걍 숫자임.

output이 나오는 확률이 있음. related to probability

blackbox에 따라 3이 나오는 확률 있고, 2 나오는 확률이 따로 있음.

확률은 0~100% 임.

0.5는 50% 의미.

0.7는 70% 의미.

근데,,,,,,,,,,, 3이라고 나오면 확률이 뭔지 어케 알지?

혹은 output이 -4면?

작은 숫자가 더 작은 확률임.

이걸 0~1로 어케 바꿀까?

화면 캡처 2021-10-25 210035.jpg

p는 0~1 값 갖는 확률.

odds = p/(1-p) 로 정의됨.

p에 따라 odd가 그래프가 이런 꼴임.

p가 0~1이면

odds는 0~무한대

화면 캡처 2021-10-25 210738.jpg

probability to log

odd에 log 취함.

그러면 log odd 는 -무한 ~ 무한

화면 캡처 2021-10-25 210915.jpg

Probability = ~~~~

블랙박스에 data 넣으면

그 결과(확률을 의미)가 -무한 ~ +무한으로 나옴.

블랙박스의 결과가 -2 +2 -2 면

-2, +2를 odd에 넣어서 probability 구할 수 있따

화면 캡처 2021-10-25 211210.jpg

Soft max 는

image인 data를 넣으면

deep neural network인 model이 3 things(곰, 개, 고양이)로 classify 하는 model이,

곰이라고 판단해야 함.

bear 37, cat -1 dog -2 로 결과 냄.

~ 로 계산해서 개에 대한 확률,

고양이 확률,

곰일 확률을 계산할 수 있다.

개일 확률 :

exp(-2) / exp(-2) + exp(-1) + exp(37)

XGBoost로 하니까 전보다 더 빨강, 연구 구분 잘하게 됨.

화면 캡처 2021-10-25 211659.jpg

learning weight인 0.3을 조절할 수 있음.파라미터로써. deafult는 0.1임.

그럼 output인 -2가 -0.6인 셈임.

그 -0.6을 확률식에다가 넣는거임.

화면 캡처 2021-10-25 211736.jpg

화면 캡처 2021-10-25 211832.jpg

이렇게, 처음보다 확률이 달라졌음.

s.jpg

이 경우에 similarity scores left, right, gain 구해보니 이와 같음.

XGBClassifier() 안에 넣을 수 있는 파라미터

learning_weight = 0.1가 default임.

❤️ 중간고사

💙 10월 28일 목 (week9_1)

💚 (ML) california_housing 예제 : 데이터 정리 (train과 test)

table data 있다.

feature1, feature2, feature3, ...

sklearn library 이용해서 ML 적용

엑셀 파일에 있는 거 열려면

왼쪽에서 경로 복사 할 수 있음.

/content/sample_data/california_housing_test.csv

엑셀파일 확장자 명은 .csv 아니면 .xlxs

그걸 로드(load)할 수 있음.

pandas에는 2 data type 있다.

기존 train 17000, 기존 test 3000개 합쳐서

20000개 만들고

그걸 다시 train 80퍼, test 20퍼로 나누고 싶다.

When you import the excel file data, you will check data size and type, ...

Then, you should check whether any missing data is in the data sheet.

사실 이경우는 null인 data가 없긴 함.

NaN (missing data)는 가끔 infinite data로 간주됨.

model 형성 시 안좋음.

그럼 그 whole 없애버려야 함, 혹은 manually put the number.

train (20000) should be split into train and test data.

근데 그러기 전에! feature와 label을 구분(seperate) 해줘야 함.

drop은 remove하는 것임.

3D 인 데이터는 axis 3개임. axis0, axis1, axis2

화면 캡처 2021-10-28 110831.jpg

feature : X (대문자)

output : y (소문자)

Preprocessing

💚 (ML) california_housing 예제 : data normalization

logistic regression은

H = w1x1 + w2x2 + w3x3 + ... + w8x8 + b

에서 w1, w2, ..., w8을 찾는 거였음. optimal combination of weight value.

근데, longitude는 - value이다.

latitude는 약 30 등

각 feature마다 range 너무 다양.. scale 다양

scale 큰 feature(ex. X4)가 affects the result dominantly.

그리고 만약 X4에 에러가 10퍼라면, 즉 5000인 데이터의 에러가 500인데, 따른 feature들보다도 큼.

이건 불공평해!!!!! unfair.

때문에 nomalization이 필요하다.

mean value가 0이고 표준편차(stand deviation)이 1이 되도록 정규분포 만들거다.

화면 캡처 2021-10-28 112448.jpg

화면 캡처 2021-10-28 112758.jpg

💚 (ML) california_housing 예제 : learning

우리는 train data에서 each feature마다 mean과 standard deviation 계산해주었다.

(X-mean)/std로 각각이 대체되었다.

test data에서도 똑같이 하려면 문제가 있다.

왜냐면 test data는 should not be involved. should be isolated for taining.

scaler = StandardScaler() 에서,

sclaer는 training data에 대한 mean, std 있는거다.

💚 (ML) diabetes 예제 : one hot encoding

여기엔 missing value 있다. infinite number로 간주된다.

화면 캡처 2021-11-02 094847.jpg

위에서 1열과 5열을 없애주고 싶다.

male은 0, F는 1로 하고 싶다.

normal은 0, diabetes는 1로 하고 싶다.

화면 캡처 2021-11-02 111504.jpg

One Hot Encoding 해줘야 함.

다음시간에 MNIST (0~9의 10class의 handwritten image) 가지고 DL 실습 해볼거임.

화면 캡처 2021-11-02 111758.jpg

이런 게 one hot encoding임.

0~9는 human based이였는데

one hot encoding 하면 computer based로 바꿈.

5종류의 병명(stroke, asthma, none, hypertension, sleep apnea) 있으니까

화면 캡처 2021-11-02 111951.jpg

이제 기존 comorbidity column 없애주자.

By using one hot encoding, the number of features increase.

이게 ML의 마지막 class임. 이제 DL 배울거임.

💙 11월 02일 화 (week9_2)

💚 (ML) california_housing 예제 : 데이터 정리 (train과 test)

linear regression -> regression problem

logistic regression -> classification problem

SVM, DecisionTree, RF, XGB -> both

Pd로 1D(series), 2D(dataframe), 3D 등 할 수 있음.

합쳐서 다시 나눠보자

y : median_house_value는 answer(label, output)로, 분리(seperate)를 해주고 싶다. 주로 single value.

X : 나머지 여러개들은 feature. questions. 주로 vector

화면 캡처 2021-11-02 104325.jpg

이제 data split 하자

💚 (ML) california_housing 예제 : data normalization

이제 Nomarlization 하자

Nomarlization 방법2 (뭐가 더 낫다는 아님. 걍 옵션)

화면 캡처 2021-11-02 105135.jpg

💚 (ML) california_housing 예제 : learning : 여러 방법

이제 learning시키자.

💙 11월 04일 목 (week10_1)

💛 (DL) breast_cancer 예제 : Import Library & Load data & Data split

from tensorflow import keras

keras는 tensorflow 안에 있다.

tensorflow는 구글에서 개발

구글이 keras를 accept함.

TF 안에 keras 있음.

data= cancer['data']에서 'data'는 feature value

data = cancer['target'] 에서 'target'은 lable data

💛 (DL) breast_cancer 예제 : Deep Neural Network Model

keras는 Sequential이란 class 있고, model이란 변수에 instance 부여.

keras.layers.Dense(10, )는 1layer

지금은 2 layer 있다. (30 / 10 / 1), 310 weight values.

10의 의미 : 10node 있다는 뜻.

load_breast_cancer는 30feature 있다. 즉 30개의 input

each node has value.

input layer (안에 30 node, 각 노드는 value 가짐)

output layer는 1 node로, 0~1의 값. (M:0, B:1)

0.5보다 크면 B, 0.5보다 작으면 M

each node 는 다음꺼에 connect 됨.

다음 layer는 10node, 총 300개의 connection.

각 connection은 weight value 있다.

즉, w1~w300 가 있는 거다.

input layer의 각 노드 이름 x1, x2, .., x30

두번째 layer의 첫 노드는 w1x1 + w2x2 + ... + w30x30 + b1임.

두번째 layer의 두번째 노드는 w31x1 + w32x2 + ... + w60x30 + b2임.

세번째 layer(output layer)은 w301 ~ w310

즉 이거 전체 토탈 총 weight는 310개임.

bias는 총 10 + 1 해서 11개임.

value는 310 weight + 11 bias 해서 총 312개임.

💛 (DL) breast_cancer 예제 : Model compile, Crossentropy

loss = 'BinaryCrossentropy' 는 cost라는 함수이고, error 찾는 거임.

우리는 train as the error decrease 해야함.

error 즉 loss 즉 cost는 decrease 되어야 함.

loss function이 'BinaryCrossentropy'임.

화면 캡처 2021-11-14 225250.jpg

regression problem

learning rate인 알파가 클 수록 더 많이 w가 팍팍 바뀜.

화면 캡처 2021-11-14 225639.jpg

Classification

loss = 'MeanSquaredError' 로 할수도 있지만 에러가 안준다. accuracy는 안는다.

loss='BinaryCrossentropy' 로 해줘야 함.

화면 캡처 2021-11-14 230008.jpg

화면 캡처 2021-11-14 230148.jpg

화면 캡처 2021-11-14 230301.jpg

💛 (DL) breast_cancer 예제 : Fitting : train the model

💛 (DL) breast_cancer 예제 : Evaluate

💛 (DL) breast_cancer 예제 : GD : optimizer='adam'

optimizer

우리는 model을 gradient descent method로 할 거임.

Gradient Descent Method는

만약 loss function이 있다면, 모든 possible value 에 대해 plot number 할 수 있고(U자), 가장 작은 게 만약 weight가 4라면, lowest weight value인 것임.

화면 캡처 2021-11-04 110243.jpg

만약 million weight value가 있다면,

1000개

million x 1000 = billion 개 되는거임.

이렇게 연산량 넘 많아지기에 최적값 찾을 수 없음. 그래서 Gradient descent method 필요함.

1) assign w value randomly.

2) 그 점에서 미분(derivate) 하자. 그럼 순간기울기 slope 얻을 수 있다. 그게 negative면 w value를 increase 해야함.

3) 이런 과정 계속 반복. 이렇게 해서 optimal weight value 얻음.

파이썬 코딩에서, w = w - g

g가 음수면 w 증가, g가 양수면 w 감소.

optimizer = 'adam'이 이 gradient descent method라고 해주는 거임.

화면 캡처 2021-11-04 111114.jpg

화면 캡처 2021-11-04 111452.jpg

근데 일케 되면 local minimum에 빠짐. global minimum으로 가야 하는데....

그래서 adam algorithm은 가속도를 구함.

공 굴려서 저기서 멈춤. 그나마 한계점 보완 가능. 공이 언덕 뛰어넘는거도 해가지구.

metrics = ['accuracy'] 해서 정확도 monitoring 가능.

💛 (DL) breast_cancer 예제 : batch_size=16

train the model

batch_size는

16 gradient value 있고, 그거 평균해서 g 구함.

화면 캡처 2021-11-04 112138.jpg

화면 캡처 2021-11-11 080154.jpg

이게 stochastic GD

1 batch가 16data 가짐.

train_data가 455개니까 455/16 = 28.4 몇이니까 28번 해보는거임.

1 epoch : 28 times update

2 epoch : 28*2 times update

20 epoch : 28*20 times update

💛 (DL) breast_cancer 예제 : 정리

weight는 30x20 + 20x10 + 10x5 + 5x1

bias는 20 + 10 + 5 + 1

다 더해서 891 parameters

input layer shape는 (30,) 로, 1D임.

화면 캡처 2021-11-11 081118.jpg

💛 (DL) breast_cancer 예제 : activation function : sigmoid, relu

node에 들어오는 거 계산할 때 w랑 x 곱한거의 summation 뿐만 아니라

그거를 activation funcion 안에 넣어줘야 함. 그래야 output이 됨.

step function, sigmoid function(이건 확률로 계산해줌), relu function(rectified linear unit function) 등.

화면 캡처 2021-11-11 081309.jpg

leaky relu는 x가 음수일 때 기울기 0.1~0.3 쯤인(1보다 작은) 거)

화면 캡처 2021-11-11 130412.jpg

Exponential Relu = E relu

화면 캡처 2021-11-11 130531.jpg

💙 11월 09일 화 (week10_2)

🧡 Tensorflow vs. Keras

화면 캡처 2021-11-11 124121.jpg

화면 캡처 2021-11-11 124331.jpg

most algorithms는 backend에서 이루어짐. store/process data.

frontend는 for communicate with human. website 등.

keras는 high-level API로, frontend이다. no backend.

convolutional layer, flattening layer, drop out 등의 복잡한 algorithm이 backend에 잇다.

keras는 pug in to backend.

Torch, Theano, Caffe는 backend까지 사람이 해야함(?). core algorithm이 이미 있다. very complicated algorithms.

keras 할 때 torch, theano, caffe 중 선택option 있다.

theano가 backend program으로서 디폴트이다.

화면 캡처 2021-11-11 125003.jpg

keras is super easy. froentend만.

tensorflow(google) 은 frontend, backend 둘 다.

화면 캡처 2021-11-11 125428.jpg

사람들이 keras로 많이 함. 그래서 구글 빡침(?).

구글도 결국 인정.

화면 캡처 2021-11-11 125459.jpg

원래 keras랑 tensorflow랑 완전 independent인데,

tensorflow 안에 library로 keras가 있다.

그래서 from tensorflow import keras 로 씀.

화면 캡처 2021-11-11 125745.jpg

keras도 단독으로 쓸 수 있다.

import keras 로

Tensorflow ( + Keras ) vs. Pytorch

Tensorflow 가 더 easy.

둘은 same result 냄.

pytorch는 every layer마다 그것의 인풋 꺼의 사이즈 정해줘야 함. 좀 더 difficult

💙 11월 11일 목 (week11_1)

💛 (DL) MNIST 예제 : import library, matplotlib

matplotlib

axis0에 60000개, axis1에 28, axis2에 28개의 data

화면 캡처 2021-11-17 192102.jpg

즉 train data는 60000개의 image 있다.

test data엔 10000개의 image 있다.

💛 (DL) MNIST 예제 : image plot해보기

이미지를 한 번 봐보자.

28 by 28의 gray scale(흑백) 이미지인데 왜 컬러로 보일까?

RGB 의 3채널 있어야 컬러로 보이는건데?

화면 캡처 2021-11-17 193210.jpg

화면 캡처 2021-11-17 194225.jpg

💛 (DL) MNIST 예제 : Data Normalization

Data Normalization 해서 데이터량 줄이자.

각 픽셀이 0~255값이였던 걸

0~1로 줄이자.

💛 (DL) MNIST 예제 : Modeling

화면 캡처 2021-11-17 195228.jpg

1) binary classification인데

(1) output이 1 node면 sigmoid 를 activation function으로 씀.

(2) output이 2 node 이상이면 softmax 를 activation function으로 씀.

//둘의 결과는 같음

2) multiple classification이면

softmax 를 activation function으로 씀.

화면 캡처 2021-11-17 195505.jpg

💛 (DL) MNIST 예제 : Model compile

💛 (DL) MNIST 예제 : Fitting : train the model

💛 (DL) MNIST 예제 : Evaluate

💙 11월 16일 화 (week11_2)

🧡 Binary Crossentropy

Binary Crossentropy는

image.png

Categorical crossentropy는 more than two classes. 3,4,5,6, ....

=> multi classification

만약 output layer이 10node면, 그중 가장 확률 높은걸 결과로 침. softmax 등 써서.

image.png

이렇게 하면 loss 값이 0.1549 임.

🧡 Gradient Descent method

image.png

gradient descnet method로 L을 w1로 편미분해서 learning rate를 곱해서 그것으로부터 빼서 w1을 계속 업데이트.

L(p, True label)은 weight에 대한 함수이다.

🧡 Back propagation : Chain rule

image.png

맨마지막 output layer꺼를 L 취하는건데 앞에 weights 엄청엄청 많으니까 chain rule 써서 하는 게 있음.

Back propagation 방식임.

image.png

Chain rule (연쇄법칙)

화면 캡처 2021-11-18 081106.jpg

🎄 파이썬 Comparison and Logical operators

and, or, not

(1<2) 이런 식으로 괄호 쓰는게 확실함

🎄 파이썬 if statement

🎄 파이썬 for loop

for item_name (temoprary) in sequence (list, tuple, dictionary, set)

💙 11월 18일 목 (week12_1)

🎄 파이썬 while

🎄 파이썬 range

🎄 파이썬 enumerate

🎄 파이썬 zip()

🎄 파이썬의 pythonic한 것들

list comprehension 이 너무 복잡해도 오히려 그건 나쁨. 적당~한거에서만 쓰자

💙 11월 23일 화 (week12_2)

💜 (CNN) MNIST 예제 : import lib & load data & data split

CNN (convolutional neuron network) also include fully connected layer.

Flatten 말고 Conv2D 쓴다.

💜 (CNN) MNIST 예제 : Data Normalization

이렇게 간단히 두 줄 쓰거나 아니면 밑에처럼 구해두 되긴함

image.png

💜 (CNN) MNIST 예제 : Data Reshape

흑백이니까 1 channel, 그래서 Conv2D(input_shape = (28, 28. 1))

만약 color image면 RGB의 3 channel이니까 Conv2D(input_shape = (28, 28, 3))

(60000, 28, 28) 를 (60000, 28, 28, 1로 우선 만들어주어야 한다.)

image.png

tensorflow/keras는 channel last

pytorch는 channel first

로 코드를 짠다.

테스트꺼도 바꿔주자.

image.png

💜 (CNN) MNIST 예제 : Modeling

image.png

이거는 one filter가 only 9 weights이다.

filter안 0or1은 랜덤임

filter 개수 32니까

(26, 26, 32) 로 output이 filed 될 것이다.

image.png

padding='same'이면,

padding은 output을 26by26이 아니라 28 by 28로 만들게 함.

input을 0으로 쫌 더 채워서 30by30로 만들어서!

입력과 출력 사이즈 같게 하려고!

image.png

가에 부분은 중요한 정보 없다고 걍 가정하고,

이미지 사이즈 유지하려고!

image.png

pool_size는 몇개 박스 중에서 고를건지, stride는 건너뛰기 간격

이건 부분부분에서 main characteristic을 찾기 위해 이걸 하는 거다.

4by4가 2by2로 됨.

4 times faster, complexity down, speed up, find main chracteristic (features) up

image.png

한번 더 해줌.

근데 만약 tensorflow(keras) 말고 pytorch로 하면 kernel_size를 3, 3, 32 로 써줘야 함.

image.png

11x11에서 마지막 row와 column은 계산되지 않는다. 그래서 5x5 됨.

image.png

image.png

image.png

💜 (CNN) MNIST 예제 : Model compile

💜 (CNN) MNIST 예제 : Fitting : train the model

💜 (CNN) MNIST 예제 : Evaluate

🧡 FC 말고 convolutional layer

image.png

fully connected layer는 inefficient하다.

a11과 a1 20000가 관계 없어서.

image.png

image.png

7by7 이미지, 3channel인 거에다가

one filter 를 곱한다.

filter의 각 값들은 weight이다.

randomly assigned number이다.

image.png

0x3 + 1x1 + 0x4 + 1x4 + 1x0 + 1x1 + 0x2 + ... = 3이다. (27 terms 더한거!)

image.png

이렇게 해서 1 얻음.

image.png

계속계속 해서 5by5 image 얻게 됨.

image가 smaller 되었다.

필터 사이즈 3by3은 내가 정하는 것! (5,5), (7,7) 등 보통은 odd number로 한다.

이 경우, filter size == kernel_size == (3,3) 이다.

이미지가 3channel이므로 filter도 자동적으로 3channel이다.

우리가 코딩에서 (3,3)만 정해주면 tensorflow가 automatically (3,3,3)로 맞춰줌.

이 필터는 3channel이니까 weight가 총 27개인 셈이다.

output size는 5 by 5 이다. (5,5,1)

Conv2D(filters=64, kernel_size=(3,3), ....) 에서

3x3x3의 one filter가 총 64개 있단 말임.

one filter는 27 weights 있고, (5,5,1) 얻으므로

총 64개의 (5,5,1)사이즈의 output 얻음.

즉, (5,5,64)이고, 이거를 activation map이라 함.

🧡 Fashion MNIST database

image.png

💙 11월 25일 목 (week13_1)

🧡 overfitting issue

데이터가 이런 식으로 있으면

image.png

이렇게 하고 싶은데, 너무 많이 train하면

image.png

이렇게 된다. 이 모델은 이 training data에 대해서만 적용되는거다...

train data가 million, multi million이라고 할 지라도 real data에 비해선 아주 일부이다.

그래서 generalize the model 하는 게 중요하다.

그 모델이 whole data를 다 커버하도록 만들어지는 게 중요하다.

model.fit(train_images, train_labels, batch_size = 128, epochs=50)

epochs 늘리면 overfiting 될 수도.

image.png

loss를 0퍼, accuracy를 100퍼로 맞춘다 해도, 이건 training data 에 한정해서만 이니까,

test data에서는 오히려 아닌거임.

즉,

loss, acc = model.evaluate(test_images, test_labels)

이거 실행해보면 아니라는 거지.

epoch을 적당~히 해야한다는거임.

best epoch는 멀까?

image.png

epoch을 3이라고 정해서 model 정해도,

test data가 그 training에 적용이 되어 있는 것임.

test data는 model selection 시 totally isolated 되어야 한다.

image.png

이렇게 train data를

real train data / validation data로 나눠야 한다.

보통 8:2, 7:3, 9:1 이렇게 함.

validation data의 목적은 choose the best model

test data의 목적은 evaluation 목적

🧡 Validation

model.fit(train_images, train_labels, batch_size = 128, validation_split=0.2, epochs=20)

이렇게 하면 train data를

real train data가 뒤쪽 80퍼

validation data가 맨 앞에있는 20퍼로 되는 거임.

만약 train data가 randomly splited 되어 있지 않으면 이거 한 번 섞어주고 real train과 validation으로 나눠줘야 됨.

model.fit(train_images, train_labels, batch_size = 128, validation_data=(val_images, val_labels), epochs=20)
from sklearn.model_selection import train_test_split

해주고

train_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.2, random_state = 100 )

해야 함.

image.png

이런식으로 되게 밸런스 맞춰주기!

train_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.2, stratify = train_labels , random_state = 100 )

stratify 는 나눠지는 (라벨 비율이 같게!) 거의 밸런스 맞춰지게 나눠짐.

image.png

image.png

image.png

🧡 History

history = model.fit(train_images, train_labels, batch_size = 128, validation_split=0.2, epochs=20)

이 process의 result를 history에 일단 저장한다.

이건 training loss를 minimize하도록만 진행된다.

validation data는 not involved in the training 되고 있따.

validation loss는 줄고 있다가 언젠가부터 안줄어.

image.png

image.png

이렇게 쭉 20개 있음(epoch 20으로 햇으니까!)

🧡 plt.plot loss, accuracy for train and validation

image.png

노란색 validation loss 가 줄다가 점점 커짐.

overfitting 되었다는 뜻임.

교차점 or 노란색이 minimum일 때 의 epoch인 7일 때가 제일 베스트이다.

image.png

🧡 if just one data set

image.png

🧡 path = 'best_model.h5'

image.png

val_loss 가 제일 작은 게

best_model.h5에 저장되어잇음.

image.png

🧡 earlyStopping과 patience

근데 만약 epochs=10000 이렇게 설정하면, 너무너무 많이 기달려 야하니까

image.png

근데 올라갓다 내려갓다 그러니까

patience = 5 이것두 넣어줘야 함.

5번이나 기다렸는데 그 5번전꺼보다 높으면 stop해라.

image.png

💜 (CNN) MNIST 예제 : overfitting issue 해결 후

💙 11월 30일 화 (week13_2)

🧡 accuracy 말고 loss 관찰 이유

왜 accuracy 말고 loss로 할까?

image.png

여기서 accuracy는 100퍼센트지만

그치만 그닥 안좋아서 더 트레이닝해야된다.

image.png

이건 accuracy가 75퍼지만, 더 좋은 모델이다.

이 때문에 monitor를 val_accuracy 말고 val_loss를 쓴다.

🧡 layer 이름 바꾸는 방법 (at Sequential API)

image.png

image.png

🧡 functional API 쓰는법

image.png

image.png

🧡 convolutional layer 분석

x = keras.layers.Conv2D(filters = 32, kernel_size = (3,3), activation = 'relu', padding = 'same', input_shape = (28, 28, 1), name = '1stCV')(input)
x = keras.layers.MaxPool2D(pool_size = (2,2), strides=(2,2), name='1stMP')(x)

image.png

image.png

image.png

🧡 중간 과정만 관찰 : 1 output

🧡 중간 과정만 관찰 : 2 output

image.png

image.png

💜 (CNN) fashion 예제 : 정리

💙 12월 02일 목 (week14_1)

💜 (CNN) fashion 예제 : 복습

💜 (CNN) CIFAR10 예제 : cifar란?

image.png

💜 (CNN) CIFAR10 예제 : Data Normalization

💜 (CNN) CIFAR10 예제 : Data Reshape 필요 없음

💜 (CNN) CIFAR10 예제 : Modeling, compile, Fitting, Evaluate

이제 layer 수 증가시켜서 더 complicate한 모델 만들자...

근데 이거 넘 optimize하기 힘든 거 아니냐?

🧡 Transfer Learning : ResNet50

transfer learning : resnet50의 model 앞에꺼만 베끼고 뒤에 flatten부터 FC는 사용자가 조절해서 쓰는거

image.png

image.png

image.png

❤️ (CNN) CIFAR10, ResNet50 예제 : 전체

image.png

요게 ResNet50의 output이다.

❤️ (CNN) CIFAR10, ResNet50 예제 : 전체 + 이미지 크기 조절✨

💙 12월 07일 화 (week14_2)

❤️ (CNN) CIFAR10, ResNet50 예제 : 복습, layer 값 수정 쪼금

🧡 Transfer Learning

이런 걸 transfer learning이라고 한다.

image.png

1.2Million Image form imageNet,

그리고 이게 classify 1000 classes.

50000 images from CIFAR10 ->classify 10개의 target(classes)으로.

image.png

🧡 TL 접근 1 : train all parameters

Approaches

1) train all parameters

(우리가 한 방법)

🧡 TL 접근 2 : pretrained는 frozen하고, train only FC

2) partially train, 즉 pretrained는 frozen하고, train only FC

근데 가끔은 빨간색 할 필요 없고 New FC꺼만 train할 때도 있음.

image.png

image.png

image.png

즉, 175개의 layer 있다.

image.png

image.png

true니까 update weight and bias 할 수 있다.

image.png

이렇게 바꾸면 0번 layer의 weight, bias를 바꿀 수 없게 한다.

모든 parameter를 못바꾸게 하면,...

image.png

image.png

trainable params는 can be updated : FC이다.

non-trainable params :는 can not be updated : res50꺼이다.

image.png

🧡 TL 접근 3 : pretrained은 frozen하고, for only 1 or 2 epochs는 train all

3) pretrained은 frozen하고, for only 1 or 2 epochs는 train all

image.png

🧡 Data Augmentation

image.png

완전 똑같은 이미진데, 이렇게 조금씩 변형 일어나면 다른 이미지로 인식함.

그래서 데이터 부족할 때, 이렇게 변형해가지구 트레인 하면 됨.

model을 generalize하기 위해, increase the number of image, by augmentation.

image.png

❤️ (CNN) CIFAR10, ResNet50 예제 : 전체 + data augmentation

💙 12월 09일 목 (week15_1)

image.png

image.png


model.add(keras.layers.Dense(3,activation = 'relu', input_shape=(2,))) 
model.add(keras.layers.Dense(1, activation='sigmoid'))

image.png


input = keras.layers.Input(shape=(2,), name='Input_layer')

x = keras.layers.Dense(3, activation='relu', name='1stFC')(input)

output = keras.layers.Dense(1, activation='sigmoid', name='lastFC')(x)

model = keras.models.Model(inputs=input, outputs=output)

image.png

image.png

참고로 Flatten의 2304는 6 x 6 x 64를 의미

image.png

image.png

image.png

6번

7번

for layer in base_model.layers:
  layer.trainable = False

8번

for i in range(50) :
  base_model.layers[i].trainable = False
for (i,layer) in enumerate(base_model.layers) :
  if i < 50 :
    layer.trainable = False

image.png

image.png

The number is 1 0

The number is 3 0

image.png

The number is 1 0

The number is 1 2

The number is 1 4

The number is 3 0

The number is 3 2

The number is 3 4